// 自ECMAScript 2015起，symbol成为了一种新的原生类型，就像number和string一样。
// tsc -init生成tsconfig.json配置文件，终端-运行任务-tsc:监视tsconfig.json
// symbol类型的值是通过Symbol构造函数创建的。
let sym1 = Symbol();
let sym2 = Symbol("key");   // 可选的字符串key

// symbols是不可改变且唯一的
let sym3 = Symbol("key");

sym2 === sym3;  // false

// symbols是唯一的像字符串一样，symbols也可以被用做对象属性的键
let sym:any = Symbol();
let obj = {
    [sym]: "value"
};

console.log(obj[sym]);

// const sym:unique symbol = Symbol();
// let obj = {
//     [sym]: "value"
// };

// console.log(obj[sym]);

// console.log(obj[sym]); // "value"

// Symbols也可以与计算出的属性名声明相结合来声明对象的属性和类成员
const getClassNameSymbol = Symbol();

class C {
    [getClassNameSymbol]() {
        return "C";
    }
}

let c = new C();
let className = c[getClassNameSymbol](); // "C"
